Glitch でアプリケーションを作成するとそのプロジェクトはノンベアな Git リポジトリとして作られます。その為、上手いことやればgit push
後に更新内容を即反映させれます。
ローカルマシンの準備
まずはgit push
できるようにする必要があります。
Glitch でアプリケーションを作った後の下部メニューにある アプリケーションを作成Tools から確認できます。この URL がgit push
先になります。
その URL がhttps://...@api.glitch.com/git/<アプリ名>
のような場合、
git clone https://...@api.glitch.com/git/<アプリ名> --origin glitch
# リモート名を glitch としてクローンする
で持ってくるか、既存のプロジェクトの場合はglitch
というリモート URL 情報を追記します。
git remote add glitch https://...@api.glitch.com/git/<アプリ名>
これでgit push glitch <branch>
でgit push
コマンドは叩けるようになりました。
Glitch 側の準備
こちらは2つの準備が必要です。
ローカルから
git push
できるようにアプリ更新されるように
ローカルから git push できるように
今の状態ではまだ Glitch へgit push
できません。上記でも書いたとおりノンベアなリポジトリだからです。ちなみんこれは Glitch 上でmaster
にいる場合master
へはgit push
できないことを意味します。
ですが、この制約は解除することが可能です。これには Glitch 側のコンソールに入りプロジェクトディレクトリの中で git config --add receive.denyCurrentBranch ignore
を実行します。
これでローカルからここへgit push
できるようになりました。
制約解除については、複数人で開発しているような場合に、履歴が狂わないようとの制約ですが、目的は単にアプリケーションを最新の状態にすることだけであって、コードの管理ではない為(それは GitHub などで行う)この制約は無くしても大丈夫だと考えます。
アプリ更新されるように
git push
された後コードは更新されるはずですが、まだ完全ではありません。Glitch ではアプリケーションの更新にはターミナルでrefresh
というコマンドを叩く必要があります。
この解決には Git フックのサーバーサイドフックであるpost-receive
フックを使います。これはgit push
されコードの更新などされた後に実行されるフックです。
Glitch ターミナルから.git/hooks/post-receive
ファイルを以下のように書き換えます。
#!/bin/sh
cd /app;
git --git-dir=.git reset --hard
refresh
これは、
/app
ディレクトリ(リポジトリ)へ移動何故か差分があるので最新コードにリセット
refresh
でアプリケーション更新
を行います。
最後にこのファイルへ実行権限を渡しておきます。
chmod +x .git/hooks/post-receive
確認
うまく設定できれば、適当にgit push glitch ...
後に一連のフローでアプリケーションが更新されるはずです。